home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / share / python-support / python-rdflib / rdflib / syntax / serializers / N3Serializer.py < prev    next >
Encoding:
Python Source  |  2007-04-04  |  2.9 KB  |  95 lines

  1. # rdflib/syntax/serializers/N3Serializer.py
  2.  
  3. from rdflib.syntax.serializers.TurtleSerializer import TurtleSerializer, SUBJECT, VERB, OBJECT
  4. from rdflib.Graph import Graph
  5.  
  6. class N3Serializer(TurtleSerializer):
  7.     short_name = "n3"
  8.  
  9.     def __init__(self, store, parent=None):
  10.         super(N3Serializer, self).__init__(store)
  11.         self.parent = parent
  12.  
  13.  
  14.     def reset(self):
  15.         super(N3Serializer, self).reset()
  16.         self._stores = {}
  17.         
  18.     def getQName(self, uri):
  19.         qname = None
  20.         if self.parent is not None:
  21.             qname = self.parent.getQName(uri)
  22.         if qname is None:
  23.             qname = super(N3Serializer, self).getQName(uri)
  24.         return qname
  25.         
  26.     def indent(self, modifier=0):
  27.         indent = super(N3Serializer, self).indent(modifier)
  28.         if self.parent is not None:
  29.             indent += self.parent.indent(modifier)
  30.         return indent
  31.     
  32.  
  33.     def p_clause(self, node, ignore=SUBJECT):
  34.         if isinstance(node, Graph):
  35.             self.subjectDone(node)
  36.             self.write(' {')
  37.             self.depth += 1
  38.             serializer = N3Serializer(node, parent=self)
  39.             serializer.serialize(self.stream)
  40.             self.depth -= 1
  41.             self.write('\n'+self.indent()+' }')
  42.             return True
  43.         else:
  44.             return False
  45.  
  46.     def s_clause(self, subject):
  47.         if isinstance(subject, Graph):
  48.             self.write('\n'+self.indent())
  49.             self.p_clause(subject, SUBJECT)
  50.             self.predicateList(subject)
  51.             self.write('. ')
  52.             return True
  53.         else:
  54.             return False
  55.     
  56.     def statement(self, subject):
  57.         self.subjectDone(subject)
  58.         properties = self.buildPredicateHash(subject)
  59.         if len(properties) == 0:
  60.             return
  61.         
  62.         if not self.s_clause(subject):
  63.             super(N3Serializer, self).statement(subject)
  64.             
  65.     def path(self, node, position):
  66.         if not self.p_clause(node, position):
  67.             super(N3Serializer, self).path(node, position)
  68.             
  69.     def startDocument(self):
  70.         ns_list= list(self.namespaces.items())
  71.         ns_list.sort()
  72.                 
  73.         for prefix, uri in ns_list:
  74.             self.write('\n'+self.indent()+'@prefix %s: <%s>.'%(prefix, uri))
  75.  
  76.         if len(ns_list) > 0:
  77.             self.write('\n')
  78.         #if not isinstance(self.store, N3Store):
  79.         #    return
  80.         
  81.         #all_list = [self.label(var) for var in self.store.get_universals(recurse=False)]
  82.         #all_list.sort()
  83.         #some_list = [self.label(var) for var in self.store.get_existentials(recurse=False)]
  84.         #some_list.sort()
  85.         
  86.         
  87.         #for var in all_list:
  88.         #    self.write('\n'+self.indent()+'@forAll %s. '%var)
  89.         #for var in some_list:
  90.         #    self.write('\n'+self.indent()+'@forSome %s. '%var)
  91.         
  92.             
  93.         #if (len(all_list) + len(some_list)) > 0:
  94.         #    self.write('\n')
  95.